home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1996 April
/
CHIP 1996 aprilis (CD06).zip
/
CHIP_CD06.ISO
/
hypertxt.arj
/
9410
/
PGP.CD
< prev
next >
Wrap
Text File
|
1994-11-23
|
18KB
|
295 lines
@VPretty Good Privacy@N
@VSzigorúan bizalmas!@N
Az adatbiztonság központi kérdés minden gazdasági
szervezetnél. Az adatbiztonságnak pedig szerves része az
adattitkosság és adattitkosítás.
Napjaink kulcsfontosságú témája az adat- és vírusvédelem.
De vajon megteszünk-e mindent adataink védelmére? Nos, a
legtöbb helyen drága szoftvereket és hardvereket használnak
erre a célra, otthon pedig valamilyen jelszóvédelmet --
mondjuk a BIOS-ét. Pedig az ilyen megoldások néhány
kivétellel nem nyújtanak igazi biztonságot (itt most nem a
szándékos károkozásra gondoltunk, hanem az adatlopásra).
A legtöbb titkosító módszerre létezik visszafejtô. Ilyen
""gyenge" titkosítás például a Egyesült Ållamok kormánya
által favorizált DES! Egy ilyen visszafejtést persze nem
nagyon fogunk otthon végrehajtani egy PC-n, de egy nagyobb
gépen már viszonylag rövid idôn belül elkészülhetnénk vele.
És pontosan ezért ajánlják több helyre is. Hiszen --
maradjunk kedvenc példánknál, a szabadság hazájánál -- az
USA-ban rengeteg nagygépet alkalmaznak ilyen célra az
állami szervezetek. Például az NSA, amely figyel a
telefonvonalaktól kezdve a rádióadásokon át a hálózatokig
mindent, amit tud, és gyûjti az adatokat. (Az, hogy kinek,
még nem egészen tisztázott... -- legalábbis a nyilvánosság
számára.) Éppen ez munkájuk lényege. Ugyanis ha egy DES
kódot -- vagy jelszót -- valakinek el akarunk juttatni,
akkor óhatatlanul igénybe kell vennünk a telekommunikáció
egyik formáját -- és a titkos kulcsunk máris az NSA
archívumának részévé válik, megóvva a nagygépeket a túlzott
számolási munkától. Åm, ez csak egy apró fricska lenne, de
a java még hátra van.
Az Egyesült Ållamokban elfogadták a Clipper chip
használatát. Ez az egyszerû kis játékszer kódolásra való.
Ilyeneket használnának a különbözô biztonsági
berendezésekben, például a telefonokban. A dolog
""érdekessége", hogy az állam rendelkezik mindegyik chip
kulcsával -- természetesen kizárólag állambiztonsági
okokból. Meg kell mondjuk ôszintén, minket mint szaksajtót
kevéssé érintene, ha a kormány lehallgatná a
beszélgetéseinket, hiszen teljesen politikamentesek. De
nincs biztosítva, hogy becsukják a fülüket akkor is, amikor
éppen szakmai titkokról, például a Virkill legújabb
vírusdetektálási módszerérôl beszélgetünk. És semmi
biztosítékunk nincs arra, hogy nem használják fel az így
szerzett információkat. Ez (a ""Virkill lehallgatása")
aligha okozna gondot, de a politikai és gazdasági vezetôk
beszélgetéseinek visszafejtése éppúgy könnyû lenne... A
Clippert egyébként nemcsak az USA-ban, hanem sok más
országban is be kívánják vezetni -- például Hollandiában,
amely állam szintén a szabadságáról híres.
Åm túl messzire kalandoztunk. Térjünk vissza eredeti
témánkhoz! Már a DES kapcsán felmerült egy probléma, amire
logikus és egyszerû megoldást lehet találni. Elôször
azonban tisztázzuk, hogyan történik a titkosítás.
Szükségünk van valamire, amit titkosítunk, valamilyen
titkosító eljárásra, valamint egy jelszóra. Ezzel a
jelszóval mondjuk el-XOR-oljuk a file-t, és a jelszót
eljuttatjuk a címzettnek a file-lal együtt. A késôbbiekben
már csak a titkosított file-t kell küldeni, tehát elég
egyszer használni egy nagy megbízhatóságú csatornát. Igen
ám, de legtöbbször nem áll rendelkezésre nagy
megbízhatóságú csatorna -- ilyenkor illik paranoiásnak
lenni. Ezen a tényen az sem változtat, ha nem XOR-olunk,
hanem egy jóval bonyolultabb kódolást végzünk, hiszen a
kulcs így is elveszhet, ergo megközelítôleg ugyanakkora a
kockázat.
A megoldás a kétkulcsos rendszerekben rejlik. Az egyik
rejtjelkulccsal kódoljuk a szöveget, majd egy másikkal
dekódoljuk. A kulcsok közül az egyiket elküldjük, és máris
kezdôdhet a kommunikáció. Az általunk elküldött kulccsal
kódolt dolgokat csak a mi kulcsunk fogja nyitni. Ezért a
küldendô kulcsot akár egy nyílt levelezôlapon is
küldhetjük, a neve is ""public key", azaz nyilvános kulcs.
Ha ez valakinek a kezébe került, nem tud vele semmit sem
csinálni, természetesen azon kívül, hogy készít nekünk egy
levelet, amit csak mi tudunk elolvasni.
Ma már több ilyen rendszer létezik. A legklasszikusabb
talán az RSA (Rivest-Shamir-Adleman) kódolás, a
legelterjedtebb viszont kétségkívül a PGP, a Pretty Good
Privacy (Egészen Jó Magánélet). Az eljárást eredetileg
Philip Zimmermann fejlesztette ki, majd adta közre program
formájában. A program freeware, bár az amerikai törvények
értelmében nem vihetô ki az országból, tehát igyekezzünk
egy nem amerikai forrásból beszerezni, hogy ne kövessünk el
törvénysértést.
Ebben a pillanatban az általunk ismert legfrissebb verzió a
2.6, ezen keresztül fejtjük ki (stb.), hogy mit is lehet
egy ilyen programmal csinálni.
A legfontosabb mindenképpen az üzenetek titkosítása. De
mielôtt ezt megtehetnénk, el kell készítenünk saját,
illetve a publikus kulcsunkat. Elôször is állítsuk be az
idôzónára jellemzô környezeti változót:
@KSET TZ=MET-1DST@N majd adjuk ki a @Kpgp -kg@N parancsot.
A kulcs hatásfoka érdekében az 1024 bitet válasszuk --
végtére is ha már dolgozunk, csináljuk lelkiismeretesen.
Az user ID-nek adjuk meg azt a nevet amit a levelekben
használni akarunk, illetve ha van e-Mail címünk, akkor azt
is, <> jelek közé zárva. A jelszó a kulcs további
eléréséhez kell majd -- tehát a kulcs ettôl független, de
hogy el ne lophassák munka után a géprôl, még a
jelszavunkkal kódoljuk is. Jelszónak érdemes valami olyan
dolgot választani, ami elsôre eszünkbe jut a programról, és
nem annyira kézenfekvô, hogy más is kitalálja. Ezek után
már csak a véletlenszám-generálásba kell besegítenünk egy
kis billentyûnyomogatással.
Ezek után szükségünk lesz a címzett publikus kulcsára. Ezt
egy file-ban kaphatjuk meg tôle. Ha kiadjuk a
@Kpgp -ka <filenév>@N
parancsot, akkor máris elraktároztuk a kulcsát késôbbi
felhasználásra. Mi a
@Kpgp -kx <filenév>@N
paranccsal készíthetjük el a publikus kulcsunk file-ban
elküldhetô változatát (a <filenév> címû file-ba fogja
kirakni).
Titkosításhoz a
@Kpgp -e <filenév> <userid>@N
parancsot adjuk ki -- ez a <filenév> nevû file-t fogja az
<userid> nevû ember kulcsával titkosítani. Egymás után
több ID-t is megadhatunk, ilyenkor mindenkinek külön
legyártja a saját kulcsával az üzenetet.
Ha mi kapunk üzenetet, akkor azt a
@Kpgp <filenév> -o <kifile>@N
utasítással olvashatjuk el. A <filenév> a kapott
tikosított file, a <kifile> pedig a kibontott file lesz. A
kibontott file-t használat után semmisítsük meg -- nem elég
törölni, használjuk a WIPEFILE-t (Norton Utilities, 4.5-ig)
WIPEINFO-ot (Norton Utilities, 6.0 felett) vagy valami
hasonló segédprogramot!
Lehetôség van arra is, hogy egy szöveget -- vagy adatfile-t
-- ne titkosítsunk, csak szignáljuk, azaz jelezzük
valódiságát. Ez egyfajta CRC-t képez a szövegbôl és a
kulcsból. Ezt a
@Kpgp -s <filenév>@N
paranccsal tehetjük meg. Ilyenkor az ellenállomás a
@Kpgp <filenév>@N
paranccsal tudja megnézni, hogy valaki nem piszkált-e bele
levelünkbe.
Ezeken kívül még számtalan funkciót nyújt a program. A
kezelés megkönnyítésére több shell -- kezelô -- programot
is készítettek, ezek közül a PGPShell a legismertebb. Ebben
egyszerû menübôl tudjuk elvégezni a mindennapi használathoz
szükséges mûveleteket. A programhoz egyébként a teljes
forrást be lehet szerezni, amely PGP26SRC.ZIP néven kering
közkézen (a szerzô tudtával).
Zárszóként talán annyit, hogy senki ne higgye, hogy a
szerkesztôség tagjai üldözési mániában szenvednek,
mindössze az adatok biztonságát és az adatbiztonság
szabadságát akarják segíteni most és a jövôben. Már most
érdemes elkezdeni használni a programot, hogy megszokássá
váljon, és akkor már túl nagy visszhangot váltana ki, ha
egy szervezet be akarná tiltani a PGP-t...
@KLencsés Gábor@N
┌──────────────────────────────────────────────────────────┐
│ @VAz elmélet@N │▒
│ │▒
│ A kódolás alapgondolata az, hogy jelenlegi tudásunk │▒
│ alapján egy igen nagy számról polinom lépésszámú │▒
│ algoritmussal el lehet dönteni, hogy prím-e, de ez az │▒
│ algoritmus nem alkalmas arra, hogy megtalálja egy │▒
│ nem-prím szám prímtényezôs felbontását. Erre csak │▒
│ exponenciális lépésszámú algoritmus létezik (ami 2-300 │▒
│ jegyû számnál még a legjobb számítógépeken is több évig │▒
│ elfuthat, míg végez). │▒
│ │▒
│ Tehát könnyen lehet találni két darab néhány száz jegyû │▒
│ prímszámot (1-2 perc egy 386-oson), de ha ezeket │▒
│ összeszorozzuk, nagyon kicsi az esély, hogy valaki │▒
│ kitalálja, melyik két szám szorzatával áll szemben. │▒
│ (Lásd még a számelmélet alaptételét: egy szám │▒
│ egyértelmûen bontható fel prímtényezôk szorzatára...). │▒
│ Tehát már az is jó védelmet nyújtana, ha a bankba │▒
│ betett pénzt csak annak adnák ki, aki a banknak │▒
│ meghagyott szám egy osztóját meg tudja mondani. │▒
│ Feltéve, ha nem hagyjuk benn a pénzt több száz évre, │▒
│ hiszen ennyi idô alatt esetleg ki tudják találni a bank │▒
│ alkalmazottai a kódot. A módszer hátránya, hogy miután │▒
│ megmondtuk a kódot, újat kell választani, hiszen a │▒
│ pénztáros gondosan feljegyezheti a titkos számot. │▒
│ │▒
│ Némi matek: │▒
│ │▒
│ @Kx === y (mod n)@N │▒
│ │▒
│ (olvasd: @Kx@N kongruens @Ky@N-nal modulo @Kn@N) azt │▒
│ jelenti, hogy @Kx@N-nek és @Ky@N-nak ugyanannyi a │▒
│ maradéka, ha elosztjuk ôket @Kn@N-nel. Például 11===21 │▒
│ (mod 5) igaz. │▒
│ │▒
│ @Kfi (m)@N │▒
│ │▒
│ az @K1..m-1@N számok közül az @Km@N-hez relatív prímek │▒
│ száma. Ha @Km@N prím, akkor @Kfi(m)@N értelemszerûen │▒
│ @Km-1@N, ha pedig @Km@N két prím (@Kp@N és @Kq@N) szorzata, akkor │▒
│ │▒
│ @Kfi(m)=(p-1)(q-1)@N │▒
│ │▒
│ Bebizonyítható, hogy │▒
│ │▒
│ @Kx^(fi(m))===1 (mod m)@N │▒
│ │▒
│ ha @Kx@N és @Km@N relatív prímek. │▒
│ │▒
│ Szóval az algoritmus (ez nem pontosan az, amit a PGP │▒
│ használ, hanem csak a leegyszerûsített alapgondolat): │▒
│ │▒
│ Tekintsük az üzenetet úgy, mint (például) 200 jegyû │▒
│ számok sorozatát (a csonka blokkot 0-kal kitöltve -- ha │▒
│ a file hossza nem osztható 200-al). Elô lehet állítani │▒
│ egy kódolófüggvényt, amit bárkivel közölni lehet, mivel │▒
│ csak kódolásra alkalmas, dekódolni ez alapján nem lehet │▒
│ az üzeneteket. Egyúttal lehet készíteni egy dekódoló │▒
│ függvényt is, amit viszont célszerû titokban tartani. │▒
│ Ezután értelemszerûen ha valaki küld nekem valamit, │▒
│ kódolja az üzenetet a nyilvános kódolófüggvényemmel, én │▒
│ pedig dekódolom azt az én titkos függvényemmel. │▒
│ │▒
│ E függvények elôállítása: │▒
│ │▒
│ Válasszunk két darab 100 jegyû prímszámot ízlés │▒
│ szerint; ezek legyenek @Kp@N, illetve @Kq@N. │▒
│ │▒
│ @Kn = p*q@N @K@N @Km = fi(n) = (p-1)(q-1)@N │▒
│ │▒
│ Válasszunk ki tetszôlegesen egy olyan @Ke@N számot, │▒
│ amire teljesülnek a következôk: │▒
│ │▒
│ @K1 <= e <= n@N │▒
│ │▒
│ és │▒
│ │▒
│ @Ke@N relatív prím legyen @K(p-1)@N-hez és @K(q-1)@N-hez│▒
│ │▒
│ Oldjuk meg az │▒
│ │▒
│ @Ke*d === 1 (mod m)@N │▒
│ │▒
│ kongruenciát. Ebbôl kapunk egy @Kd@N számot. Hozzuk │▒
│ nyilvánosságra az @Kn@N és @Ke@N számokat, a többit tartsuk │▒
│ titokban. Ezután a kódoló függvény a következô (így │▒
│ kapjuk meg @Ky@N-t): │▒
│ │▒
│ @Ky === x^e (mod n)@N │▒
│ │▒
│ ahol az @Kx@N a kódolandó blokk. A dekódolófüggvény: │▒
│ │▒
│ @Kx === y^d (mod n)@N │▒
│ │▒
│ mivel: │▒
│ │▒
│ @Ky^d===x^(e*d)=x^(k*m+1)=(x^(fi(n)))^h*x===x (mod n)@N │▒
│ │▒
│ Az @Kx@N-nek relatív prímnek kell lennie @Kn@N-hez, így │▒
│ 199 hosszú blokkokat kell készíteni, és az utolsó │▒
│ elemeket ""kézileg" jóra kell csinálni. (Åltalános │▒
│ esetben 100 helyére helyettesítsünk @Kdzs@N-t és │▒
│ @Kdz@N-t, 200 helyére @Kdzs*dz@N-t, 199 helyére @Kdzs*dz-1@N-et. │▒
│ │▒
│ @KFalcon@N │▒
└──────────────────────────────────────────────────────────┘▒
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒